# -*- coding: utf-8 -*-
"""
Created on Fri Feb  1 22:36:36 2019
python3.6.3
Anaconda->spyder
opencv3.4.5
代码参考《OpenCV3计算机视觉 Python语言实现》（第二版）
@author: Administrator
"""

import cv2
import numpy as np

img = cv2.imread('pycv.png') 
#把彩图转化为灰度图
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#使用canny处理图像提取边缘
edges = cv2.Canny(gray,50,120)
miniLineLength = 20
maxLineGap = 5

"""函数原型为：HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]]) -> lines"""
#image参数表示边缘检测的输出图像，该图像为单通道8位二进制图像。
#rho参数表示参数极径 r ,以像素值为单位的分辨率，这里一般使用 1 像素。
#theta参数表示参数极角 \theta ,以弧度为单位的分辨率，这里使用 1度。
#threshold参数表示检测一条直线所需最少的曲线交点。
#lines参数表示储存着检测到的直线的参数对 (x_{start}, y_{start}, x_{end}, y_{end}) 的容器，也就是线段两个端点的坐标。
#minLineLength参数表示能组成一条直线的最少点的数量，点数量不足的直线将被抛弃。
#maxLineGap参数表示能被认为在一条直线上的亮点的最大距离。
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,miniLineLength,maxLineGap)
'''提取为二维'''
lines1 = lines[:,0,:]
print(lines1)
'''显示多条直线'''
'''for x1,y1,x2,y2 in lines[0]:则只显示一条直线'''
for x1,y1,x2,y2 in lines1[:]:
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),10)

cv2.imshow('edges',edges)
cv2.imshow('lines',img)
cv2.waitKey()
cv2.destroyAllWindows()